package com.td.module.system.service.video;

import com.td.framework.common.pojo.PageResult;
import com.td.module.system.controller.admin.video.vo.list.ListCreateReqVO;
import com.td.module.system.controller.admin.video.vo.list.ListExportReqVO;
import com.td.module.system.controller.admin.video.vo.list.ListPageReqVO;
import com.td.module.system.controller.admin.video.vo.list.ListUpdateReqVO;
import com.td.module.system.convert.video.ListConvert;
import com.td.module.system.dal.dataobject.video.ListDO;
import com.td.module.system.dal.mysql.video.ListMapper;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;

import static com.td.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.td.module.system.enums.ErrorCodeConstants.LIST_NOT_EXISTS;

/**
 * 摄像头列 Service 实现类
 *
 * @author 王翔翔
 */
@Service
@Validated
public class ListServiceImpl implements ListService {

    @Resource
    private ListMapper listMapper;

    @Override
    public String createList(ListCreateReqVO createReqVO) {
        // 插入
        ListDO list = ListConvert.INSTANCE.convert(createReqVO);
        listMapper.insert(list);
        // 返回
        return list.getId();
    }

    @Override
    public void updateList(ListUpdateReqVO updateReqVO) {
        // 校验存在
        this.validateListExists(updateReqVO.getId());
        // 更新
        ListDO updateObj = ListConvert.INSTANCE.convert(updateReqVO);
        listMapper.updateById(updateObj);
    }

    @Override
    public void deleteList(String id) {
        // 校验存在
        this.validateListExists(id);
        // 删除
        listMapper.deleteById(id);
    }

    private void validateListExists(String id) {
        if (listMapper.selectById(id) == null) {
            throw exception(LIST_NOT_EXISTS);
        }
    }

    private void validateListExistss(int channelNo) {
        if (listMapper.selectByChannelNo(channelNo) == null) {
            throw exception(LIST_NOT_EXISTS);
        }
    }

    @Override
    public ListDO getList(String id) {
        return listMapper.selectById(id);
    }

    @Override
    public List<ListDO> getListList(Collection<String> ids) {
        return listMapper.selectBatchIds(ids);
    }

    @Override
    public PageResult<ListDO> getListPage(ListPageReqVO pageReqVO) {
        return listMapper.selectPage(pageReqVO);
    }

    @Override
    public List<ListDO> getListList(ListExportReqVO exportReqVO) {
        return listMapper.selectList(exportReqVO);
    }

    @Override
    public String createLists(List<ListCreateReqVO> list) {
        for(ListCreateReqVO createReqVO:list){
            ListDO listDO = ListConvert.INSTANCE.convert(createReqVO);
            if(listMapper.selectByIds(createReqVO.getId()) == null){
                listMapper.insert(listDO);
            }else{
                listMapper.updateById(listDO);
            }
        }
        return null;
    }

}
